# -*- coding: utf-8 -*-

import sys

sys.path.append('../')
from common.config import *
from db.mysql import MysqlClient
from itertools import product
import requests
from common.helper import Helper
from urllib.parse import urlencode


class Spider(object):

    def __init__(self):
        self.mysql = MysqlClient()
        self.name = "华夏医保通（普惠版）医疗保险计划"

    # 生成数据
    def genProductInfo(self):
        plan = {
            # 年龄段
            "year": [str(i) for i in range(0, 51)],
            # 有无社保
            "socialSec": ["Y", "N"],
            # 保障期限
            "expire": ["1年"],
            # 保额
            "money": ["5000000"],
            # 附加质子重离子医疗保险 0 bu投保 1 投保
            "extSerious": ["0", "1"],
            # 缴费类型
            "payType": ["年缴"]

        }
        for v in product(plan["year"], plan["socialSec"], plan["expire"], plan["money"], plan["extSerious"],
                         plan["payType"]):
            self.mysql.cursor.execute(domain[self.name]["insert_sql"].format(
                v[0], v[1], v[2], v[3], v[4], v[5]
            ))
            self.mysql._conn.commit()
            print(domain[self.name]["insert_sql"].format(
                v[0], v[1], v[2], v[3], v[4], v[5]
            ))

    # 执行爬虫
    def requestJson(self, dt=None):

        data = {
            "age": dt["year"],
            "isSocialSecurity": dt["socialSec"],
            "isContinueInsure": "N",
            "isAdd": "N" if dt["extSerious"] == "0" else "Y",
        }
        payload = urlencode( data ).replace("+","")

        r = requests.post( url = domain[self.name]["url"],headers=domain[self.name]["header"],data=payload)
        if r.status_code == 200 and r.json()["success"]:
            price = Helper.decimalParse( r.json()["premium"])
            data = {
                "name":self.name,
                "id":dt["id"],
                "price":price
            }
            self.mysql.updatePrice( data )
        else:
            data = {
                "name":self.name,
                "id":dt["id"],
                "state":3
            }
            self.mysql.updateTask( data )
            print("\n/*更新产品价格信息失败:%d*/"%dt["id"])
    def main(self):

        while True:

            # 随机领取一条数据
            dt = self.mysql.randTask(self.name)

            if not dt:

                print("产品价格抓取完成~~~")

                return

                # 任务执行状态
            data = {
                "name":self.name,
                "id":dt["id"],
                "state":1
            }
            self.mysql.updateTask( data )

            self.requestJson( dt )
